﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    //定义一个结构体，名为PersonStruct，有三个成员变量：姓名、电话、地址，
    //在主方法中，创建一个PersonStruct结构体对象p1，为p1的成员变量赋值。
    //再声明一个PersonStruct结构体变量p2，把p1赋值给p2，改变p2的姓名，打印p1的内容。

    //定义一个类，名为PersonClass，有三个成员变量：姓名、电话、地址，
    //在主方法中，创建一个PersonClass对象p3，为p3的成员变量赋值。
    //再声明一个PersonClass变量p4，把p3赋值给p4，改变p4的姓名，打印p3的内容。


    //观察打印结果，并在在注释中，说下你对此的认识（它们为什么会这样？）
    class Program
    {
        /// <summary>
        /// 它们为什么会这样？
        /// 因为：
        /// struct 有自己的存储空间，p1、p2相当于有两个分开的存储空间，p1的值赋值给p2，p1的值不会改变（p1有单独的存储空间）。
        /// class 是共有存储空间，p1、p2的值是相通的，p2值被改变，p1值同时被改变，反之亦然。  
        /// </summary>
        public struct PersonStruct
        {
            public string name;
            public long phone;
            public string adder;
        }
        static void Main(string[] args)
        {
            
            PersonStruct p1 = new PersonStruct();
            p1.name = "阿珍";
            p1.phone =13520148521;
            p1.adder = "上海老街";

            PersonStruct p2 = new PersonStruct();
            p2 = p1;
            p2.name = "阿强";
            Console.WriteLine(p1.name);//未改变

            PersonClass p3 = new PersonClass();
            p3.Name = "阿珍爱上了阿强";
            p3.Phone = 12365485201;
            p3.Adder = "夜上海";

            PersonClass p4 = new PersonClass();
            p4 = p3;
            p4.Name = "阿强爱上了阿珍";
            Console.WriteLine(p3.Name);//改变
        }
    }
}
